

package pkg;

import java.util.ArrayList;

public abstract class Beverage_Type{
	public static final double SODA_PRICE = 1.75;
	public static final double SHAKE_PRICE = 3.75;
	public static final double COFFEE_PRICE = 1.50;
	public static final double FRUIT_DRINK_PRICE = 1.75;
	public static final double FRUIT_SMOOTHIE_PRICE = 2.75;
	public static final double ICE_CREAM_SODA_PRICE = 3.75;
	
	
	String label;
	ArrayList<Flavor> availableFlavors;
	double basePrice;
	
	public Beverage_Type(double basePrice, String c_label){
		this.basePrice = basePrice;
		this.label = c_label;
	}
	
	public double getBasePrice(){
		return basePrice;
	}
	public String getLabel()
	{
		return label;
	}
	public ArrayList<Flavor> getFlavors()
	{
		return availableFlavors;
	}
	
	public abstract String getDirections();
	public static ArrayList<Beverage_Type> getTypes()
	{
		ArrayList<Beverage_Type> retList = new ArrayList<Beverage_Type>();
		retList.add(new Soda());
		retList.add(new Coffee());
		retList.add(new Fruit_Drink());
		retList.add(new Fruit_Smoothie());
		retList.add(new Ice_Cream_Soda());
		retList.add(new Shake());
		return retList;		
	}
}

class Soda extends Beverage_Type{	
	public Soda(){
		super(SODA_PRICE, "SODA");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Soda_Cherry());
		availableFlavors.add(new Soda_Grape());
		availableFlavors.add(new Soda_Orange());
	}
	public String getDirections()
	{
		return "Add Soda";
	}
}

class Shake extends Beverage_Type{	
	public Shake(){
		super(SHAKE_PRICE, "SHAKE");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Shake_Chocolate());
		availableFlavors.add(new Shake_Vanilla());
		availableFlavors.add(new Shake_Strawberry());
	}
	public String getDirections()
	{
		return "Pour in milk\nBlend shake\n";
	}
}

class Coffee extends Beverage_Type{	
	public Coffee(){
		super(COFFEE_PRICE, "COFFEE");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Coffee_coffee());
		availableFlavors.add(new Coffee_FrenchVanilla());
		availableFlavors.add(new Coffee_Hazelnut());
	}
	public String getDirections()
	{
		return "Brew coffee\n";
	}
}

class Fruit_Drink extends Beverage_Type{	
	public Fruit_Drink(){
		super(FRUIT_DRINK_PRICE, "FRUIT DRINK");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Fruit_Apple());
		availableFlavors.add(new Fruit_Lemonade());
		availableFlavors.add(new Fruit_Orange());
	}
	public String getDirections()
	{
		return "Blend fruit drink";
	}
}

class Fruit_Smoothie extends Beverage_Type{	
	public Fruit_Smoothie(){
		super(FRUIT_SMOOTHIE_PRICE, "FRUIT SMOOTHIE");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Smoothie_Banana());
		availableFlavors.add(new Smoothie_Berry());
		availableFlavors.add(new Smoothie_Mango());
	}
	public String getDirections()
	{
		return "Blend smoothie";
	}
}

class Ice_Cream_Soda extends Beverage_Type{
	public Ice_Cream_Soda()	
	{
		super(ICE_CREAM_SODA_PRICE, "ICE CREAM SODA");
		availableFlavors = new ArrayList<Flavor>();
		availableFlavors.add(new Soda_Cherry());
		availableFlavors.add(new Soda_Grape());
		availableFlavors.add(new Soda_Orange());
	}
	public String getDirections()
	{
		return "Add Ice Cream\nAdd Soda";
	}
}


